home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / admin / linuxcon.000 / linuxcon / linuxconf-1.6 / translate / compile.c < prev    next >
C/C++ Source or Header  |  1996-02-19  |  1KB  |  66 lines

  1. #include <ctype.h>
  2.  
  3. /*
  4.     Compile a C string.
  5. */
  6. char *str_compile (const char *src, char *dst)
  7. {
  8.     while (*src != '\0'){
  9.         if (*src != '\\'){
  10.             *dst++ = *src++;
  11.         }else{
  12.             char carac = *++src;
  13.             src++;
  14.             switch (carac){
  15.             case 'a':
  16.                 carac = '\a';
  17.                 break;
  18.             case 'b':
  19.                 carac = '\b';
  20.                 break;
  21.             case 'f':
  22.                 carac = '\f';
  23.                 break;
  24.             case 'n':
  25.                 carac = '\n';
  26.                 break;
  27.             case 'r':
  28.                 carac = '\r';
  29.                 break;
  30.             case 't':
  31.                 carac = '\t';
  32.                 break;
  33.             case 'v':
  34.                 carac = '\v';
  35.                 break;
  36.             case '0':
  37.                 carac = 0;
  38.                 if (*src == 'x' || *src == 'X'){
  39.                     src++;
  40.                     while (isxdigit(*src)){
  41.                         int val = *src++;
  42.                         val = toupper(val);
  43.                         if (val >= (int)'A'){
  44.                             val -= 'A' - 10;
  45.                         }else{
  46.                             val -= '0';
  47.                         }
  48.                         carac = (char)(carac * 16 + val);
  49.                     }
  50.                 }else{
  51.                     carac = 0;
  52.                     while (*src >= '0' && *src < '8'){
  53.                         int val = *src++;
  54.                         val -= '0';
  55.                         carac = (char)(carac * 8 + val);
  56.                     }
  57.                 }
  58.             }
  59.             *dst++ = carac;
  60.         }
  61.     }
  62.     *dst = '\0';
  63.     return dst;
  64. }
  65.  
  66.